package com.oct.ywsc.core.controller;

import com.oct.ywsc.ITaskScheduler;
import com.oct.ywsc.job.TransTaskScheduler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Timer;
import java.util.TimerTask;


@Slf4j
@RestController
public class IndexController {

    @Autowired
    private ITaskScheduler taskScheduler;

    @GetMapping("/index")
    public String index(){
        return "hello world";
    }


    Timer timer ;

    TimerTask task;
    /**
     * 刷新缓存规则
     * 1. 需要等待所有待执行任务执行完成
     * 2. 刷新规则引擎中的规则
     * @return
     */
    @GetMapping("/reflush")
    public String reflushGz(){

        //1. 首先标记规则引擎为刷新状态
        TransTaskScheduler.reflushRuleManageing = true;

        // 利用定时器刷新规则引擎中的规则
        timer = new Timer();
        task = new TimerTask() {
            @Override
            public void run() {
                // 调用刷新规则引擎中的规则
                taskScheduler.reflushRuleManage();

                // 判断刷新规则完成，则销毁定时任务
                if (!TransTaskScheduler.reflushRuleManageing){
                    task.cancel();
                    timer.cancel();
                }
            }
        };
        // 延迟 1 秒后开始执行，之后每隔 5 秒执行一次
        timer.scheduleAtFixedRate(task, 0, 5000);

        return "reflushing ....";
    }



    @GetMapping("/stop")
    public String stop(){

        TransTaskScheduler.stoping = true;
        log.info("stoping ....");

        while (taskScheduler.jobSize() >0l){
            log.info(String.format("待处理任务数[%s]，请等待处理完成。。", taskScheduler.jobSize()));

            try {
                Thread.currentThread().sleep(10000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        };

        log.info("任务处理完成，可关闭应用程序");
        return "stoping";
    }


}
